#include "../include/defs.h"
#include "../include/strings.h"
#include "../include/getnum.h"
#include "../include/teclado.h"
#include "../include/shell.h"
#include "../include/driverVideo.h"
#include "../include/pruebaExc.h"
#include "../include/kasm.h"
#include "../include/gdtFront.h"
#include "../include/int.h"
#include "../include/gdt.h"


extern buf * fileDesc[MAXFILES];
//buf bufShell;
//char bufferShell[BUFSHELL];

void correrParaAtras(my_shell*bufShell){
	int aux=0;
	int i,j;

	for(i=0;i<bufShell->size;i++){
		if(bufShell->buf[i]=='\n'){
			aux++;		
		}
		if(aux == 10){
			bufShell->siguiente=i;
			break;
		}	
	}
	
		

	for(j=0;i<bufShell->size;j++,i++){
		bufShell->buf[j] = bufShell->buf[i];
	}
	
	

}

void updateShell(my_shell* bufShell){
	resetVideo();
	k_clear_screen();
	int i;
	for(i=0;i<bufShell->siguiente;i++){
		if(bufShell->buf[i] == '\n')
			isEnter();
		else		
			putc(bufShell->buf[i],1);
	}
}

int shell(my_shell* bufShell,int shell_num){

  updateShell(bufShell);
  char name[] = "<Smile 3.0>:";
  char entrada;
  int flag = 1;
  int flagComand;
  int hexa;
  

while(1)
{
  do
  {
    entrada = getc(0);
	
    if( entrada == KEY_ENTER)
    { 
	
      int i = valComando(bufShell);
	isEnter();
	  int j;
	  for(j=0; name[j]!='\0'; j++){
	      if(bufShell->siguiente < bufShell->size){
	     	bufShell->buf[bufShell->siguiente++] = name[j];
	      	putc(name[j],1);
	      }else{
    	  	correrParaAtras(bufShell);
      		bufShell->buf[bufShell->siguiente++] = name[j];
    		putc(name[j],1);        
      	      }
	  }
      
    if(i == 1)
    {
	bufShell->comando_actual.siguiente = 0;
  	bufShell->comando_actual.offset= 0;
	if(shell_num==1){
		return 2;
	}else if (shell_num ==2){
		return 1;
	}
    }    

      flag = 0;
    }
    else if( entrada == BKSP)
    {
      if(bufShell->siguiente != 0)
      {
	if (bufShell->buf[bufShell->siguiente-1] != ':' && bufShell->buf[bufShell->siguiente-2] != '>' 
				&& bufShell->buf[bufShell->siguiente-3] != '0'){
	isBksp();
	
	bufShell->siguiente--;
	bufShell->comando_actual.siguiente--;
}
      }
    }
    else if( entrada == SHIFT_TAB) //cambia de terminal
    {
//	bufShell->comando_actual.siguiente = 0;
//  	bufShell->comando_actual.offset= 0;
	if(shell_num==1){
		return 2;
	}else if (shell_num ==2){
		return 1;
	}
    }

    else
    {
      if(bufShell->siguiente < bufShell->size){
	if(bufShell->comando_actual.siguiente < bufShell->comando_actual.size){
      		bufShell->buf[bufShell->siguiente++] = entrada;
		bufShell->comando_actual.buf[bufShell->comando_actual.siguiente++] = entrada;	
    		putc(entrada,1);
      	}
      }else{
      	correrParaAtras(bufShell);
      	bufShell->buf[bufShell->siguiente++] = entrada;
	bufShell->comando_actual.buf[bufShell->comando_actual.siguiente++] = entrada;	
    	putc(entrada,1);        
      }
   }

  }while(flag);
  flag = 1;
  bufShell->comando_actual.siguiente = 0;
  bufShell->comando_actual.offset= 0;
}
}


